<!DOCTYPE html>
<html lang="zh-CN">

<head>
	<meta charset="UTF-8">
	<meta name="author" content="wangbo">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Document</title>
</head>

<body>
	<script>
		let obj = { foo: 123 };
		Object.getOwnPropertyDescriptor(obj, 'foo')
		// { value: 123,
		// writable: true,
		// enumerable: true,
		// configurable: true }
		// for...in 循环：只遍历对象自身的和继承的可枚举的属性
		// Object.keys()：返回对象自身的所有可枚举的属性的键名
		// JSON.stringify()：只串行化对象自身的可枚举的属性

		Object.getOwnPropertyDescriptor([], 'length').enumerable
		// false
		// ES6一共有6种方法可以遍历对象的属性。
		// （1）for...in
		// for...in 循环遍历对象自身的和继承的可枚举属性（不含Symbol属性）。
		// （2）Object.keys(obj)
		// Object.keys 返回一个数组，包括对象自身的（不含继承的）所有可枚举属性（不含Symbol属性）。
		// （3）Object.getOwnPropertyNames(obj)
		// Object.getOwnPropertyNames 返回一个数组，包含对象自身的所有属性（不含Symbol属性，但是包括不可枚举属性）。
		// （4）Object.getOwnPropertySymbols(obj)
		// Object.getOwnPropertySymbols 返回一个数组，包含对象自身的所有Symbol属性。
		// （5）Reflect.ownKeys(obj)
		// Reflect.ownKeys 返回一个数组，包含对象自身的所有属性，不管是属性名是Symbol或字符串，也不管是否可枚举。
		// （6）Reflect.enumerate(obj)
		// Reflect.enumerate 返回一个Iterator对象，遍历对象自身的和继承的所有可枚举属性（不含Symbol属性），与 for...in 循
		// 环相同。

	</script>
</body>

</html>